package com.objectproject.main.dao.iface;

import java.util.ArrayList;

import com.objectproject.main.model.MyObject;
import com.objectproject.main.model.MyProperty;

public interface MyPropertyDAO {
	
	public abstract MyProperty semanticSelectMyPropertyOfById(long objectId, long propertyId);
	public abstract MyProperty semanticSelectMyPropertyOf(MyObject myObject, MyProperty myProperty);
	public abstract MyProperty selectMyPropertyOfById(long objectId, long propertyId);
	public abstract MyProperty selectMyPropertyOf(MyObject myObject, MyProperty myProperty);
	public abstract MyProperty selectMyPropertyDetailOfById(long objectId, long propertyId, int localeId);
	public abstract MyProperty selectMyPropertyDetailOf(MyProperty myProperty, int localeId);	
	
	public abstract long insertMyProperty(MyObject myObject, MyProperty myProperty);
	public abstract long overridedInsertMyProperty(MyObject myObject, MyProperty myProperty);
	public abstract long insertMyPropertyLocaleSpecific(MyObject myObject, MyProperty myProperty);
	public abstract void insertMyPropertyDetail(MyObject myObject, MyProperty myProperty, int localeId);
	
	public abstract void protectedDeleteMyPropertyById(long propertyId);
	public abstract void protectedDeleteMyPropertyOfById(long objectId, long propertyId);
	public abstract void protectedDeleteMyProperty(MyProperty myProperty);//상속구조로 삭제
	public abstract void protectedDeleteMyPropertyOf(MyObject myObject, MyProperty myProperty);//해당 객체의 것만 삭제
	
	public abstract void deleteMyPropertyById(long propertyId);
	public abstract void deleteMyPropertyOfById(long objectId, long propertyId);
	public abstract void deleteMyProperty(MyProperty myProperty);//상속구조로 삭제
	public abstract void deleteMyPropertyOf(MyObject myObject, MyProperty myProperty);//해당 객체의 것만 삭제
	
	public abstract void updateMyProperty(MyObject myObject, MyProperty myProperty);//정의 변경
	public abstract void updateMyPropertyDetail(MyObject myObject, MyProperty myProperty, int localeId);
	public abstract void updateMyPropertyValue(MyObject myObject, MyProperty myProperty, int localeId);
	
	//advanced
	public abstract ArrayList<MyProperty> semacticSelectMyProperties(MyObject myObject);
	public abstract ArrayList<MyProperty> selectMyProperties(MyObject myObject);
	public abstract void insertMyProperties(MyObject myObject, ArrayList<MyProperty> myProperties);
	public abstract void insertMyPropertyDetails(MyObject myObject, ArrayList<MyProperty> myProperties, int localeId);
	public abstract void protectedDeleteMyProperties(MyObject myObject);
	public abstract void deleteMyProperties(MyObject myObject);
	
}
